﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace HCMUS_SearchService_Group2
{
    /////////////////////////////////////////////////
    /// \brief Lớp truy xuất dữ liệu từ bảng QUANHUYEN của CSDL.
    /// \details <h3>Cung cấp các phương thức để truy xuất dữ liệu từ CSDL</h3>
    /////////////////////////////////////////////////
    public class DistrictDAO : ObjectDAO, IObjectDAO
    {
        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu
        /// \returns List<ObjectDTO>.
        /// \details <h3>Lấy toàn bộ dữ liệu của bảng QUANHUYEN.</h3>
        /////////////////////////////////////////////////
        public List<ObjectDTO> GetAllDTO()
        {
            List<QUANHUYEN> listDist = new List<QUANHUYEN>();
            List<ObjectDTO> listDistDTO = new List<ObjectDTO>();
            listDist = (from dist in DataConnectionHelper.Context.QUANHUYENs select dist).ToList();
            foreach (var list in listDist)
            {
                DistrictDTO temp = new DistrictDTO() { DistrictID = list.MaQuanHuyen, DistrictName = list.TenQuanHuyen };
                listDistDTO.Add(temp);
            }

            return listDistDTO;
        }

        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu
        /// \param[in] int id.
        /// \returns ObjectDTO.
        /// \details <h3>Trả về đối tượng ObjectDTO có id tương ứng.</h3>
        /////////////////////////////////////////////////
        public ObjectDTO Search(int id)
        {
            IEnumerable<DistrictDTO> district = new List<DistrictDTO>();
            DistrictDTO districtDTO = new DistrictDTO();
            district = from dist in SearchHelper.Districts where id == dist.DistrictID select dist;
            if (district.Count() != 0)
            {
                districtDTO.DistrictID = district.First().DistrictID;
                districtDTO.DistrictName = district.First().DistrictName;
            }

            return districtDTO;
        }

        /////////////////////////////////////////////////
        /// \brief Hàm lấy dữ liệu
        /// \param[in] string name.
        /// \returns int.
        /// \details <h3>Trả về id của đối tượng có tên tương ứng.</h3>
        /////////////////////////////////////////////////
        public int GetIdByName(string name)
        {
            int id;
            IEnumerable<int> temp = new List<int>();
            temp = from dist in SearchHelper.Districts where name.CompareTo(dist.DistrictName) == 0 select dist.DistrictID;
            if (temp.Count() != 0)
            {
                id = temp.First();
            }
            else
            {
                id = -1;
            }

            return id;
        }
    }
}
